/*
 * 本类作用：测试，公共方法
 * 
 * 作者：袁小杰
 * 博客：http://blog.csdn.net/undoner
 * GIT：https://git.oschina.net/undoner
 * QQ：15137281
 * 
 */
package org.mina.client;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Random;

/**
 * 随机数据类
 * */
public class RandomTools {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		System.out.println("随机钱数：有小数------" + getRandomMoney(10, 300, true));
		System.out.println("随机钱数：没有小数----" + getRandomMoney(10, 300, false));
		System.out.println("随机日期：有时间------" + getRandomDate(true));
		System.out.println("随机日期：没有时间----" + getRandomDate(false));
		System.out.println("随机地区码：----------" + getRandomAreaCode());
		System.out.println("随机银行码：----------" + getRandomBankCode());
		System.out.println("随机用户ID：----------" + getRandomUid(10));
		System.out.println("\n随机字符串：----------" + getRandomStr());
	}

	/**
	 * <b>取得随机钱数</b>
	 * 
	 * @param min
	 *            (int) 整数最小值
	 * 
	 * @param max
	 *            (int) 整数最大值
	 * 
	 * @param cent
	 *            (boolean) 是否精确到分（true:是|false:否）
	 * 
	 * @return (String) 随机钱数（10.00~400.99），形如：<b>150.47</b>
	 * */
	public static String getRandomMoney(int min, int max, boolean cent) {
		Random r = new Random();
		String integer = String.valueOf(Math.abs(r.nextInt() % max) + min);
		String decimal = String.valueOf(r.nextDouble()).substring(1, 4);
		if (cent) {
			return integer + decimal;
		} else {
			return integer;
		}
	}

	/**
	 * 取得随机日期
	 * 
	 * @param time
	 *            (boolean) 是否有时间（true:是|false:否）
	 * 
	 * @return 日期字符串(String)，形如：<b>2010-06-06 16:21:49</b>
	 * */
	public static String getRandomDate(boolean time) {
		Random r = new Random();
		SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd"
				+ (time ? "HHmmss" : ""));
		Calendar cal = Calendar.getInstance();
		cal.set(2010, 2, 1);
		long start = cal.getTimeInMillis();
		cal.set(2010, 6, 1);
		long end = cal.getTimeInMillis();
		Date d = new Date(start + (long) (r.nextDouble() * (end - start)));
		return format.format(d);
	}

	/**
	 * 取得随机地区编码
	 * */
	public static String getRandomAreaCode() {
		Random r = new Random();
		return "0" + String.valueOf(r.nextInt(8) + 1);
	}

	/**
	 * 取得随机银行编码
	 * */
	public static String getRandomBankCode() {
		Random r = new Random();
		String arr[] = new String[] { "JT", "GS", "JS", "ZG", "NY", "YZ", "XY",
				"ZS", "YD", "GD", "SY" };

		int b = r.nextInt(arr.length);
		return arr[b];
	}

	/**
	 * 取得随机用户ID（可用作用户ID、缴费ID）
	 * 
	 * @param max (int) 要取得的字符串宽度最大值（大于1，最好不要超过16）
	 * */
	public static String getRandomUid(int max) {
		Random r = new Random();
		return String.valueOf(r.nextDouble()).substring(2, max);
		// return ""
	}

	/**
	 * 使用随机用户ID、银行码、地区码、钱数和日期取得随机整串
	 * 
	 * @return 随机整串，形如：04|D101|39029225226595|83.82|18|20100510151532|20100626
	 * */
	public static String getRandomStr() {
		return getRandomAreaCode() + "|" + getRandomBankCode() + "|"
		+ getRandomUid(16) + "|" + getRandomUid(13) + "|" + getRandomMoney(10, 400, true) + "|"
				+ getRandomMoney(10, 30, false) + "|" + getRandomDate(true)
				+ "|" + getRandomDate(false);
	}
}
